package oris.components;

public class OrisEvent {
    // <editor-fold defaultstate="collapsed" desc="Variables">

    private int changeX = 0;
    private int changeY = 0;
    private EnumDirecoes direction;
    private boolean isDragging;

    private int posX = 0;
    private int posY = 0;
    private Object source;

    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Constructors">
        
    /**
     * Constrói um evento vazio.
     */
    public OrisEvent(){
        this.changeX = 0;
        this.changeY = 0;
        this.direction = EnumDirecoes.NADA;
        this.isDragging = false;
        this.posX = 0;
        this.posY = 0;
        this.source = null;
    }
    
    /**
     * Constrói um evento de mudança na janela
     * @param changeX A mudança na posição X
     * @param changeY A mudança na posição Y
     * @param direction A direção da mudança
     * @param isDragging Se está havendo um 'dragging'
     * @param posX A posição do mouse no eixo X
     * @param posY A posição do mouse no eixo Y
     * @param source A origem do evento
     */
    public OrisEvent(int changeX, int changeY, EnumDirecoes direction, boolean isDragging, int posX, int posY, Object source) {
        this.changeX = changeX;
        this.changeY = changeY;
        this.direction = direction;
        this.isDragging = isDragging;
        this.posX = posX;
        this.posY = posY;
        this.source = source;
    }
    
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Others">
    
    /**
     * Retorna a mudança na posição X do último evento até o atual.
     * @return A mudança na posição X
     */
    public int getChangeX() {
        return changeX;
    }

    /**
     * Retorna a mudança na posição Y do último evento até o atual.
     * @return A mudança na posição Y
     */
    public int getChangeY() {
        return changeY;
    }

    /**
     * Retorna a direção da mudança.
     * @return A direção
     */
    public EnumDirecoes getDirection() {
        return direction;
    }

    /**
     * Retorna a posição de onde este evento foi originado.
     * @return A posição X
     */
    public int getPosX() {
        return posX;
    }

    /**
     * Retorna a posição de este evento foi originado.
     * @return A posição Y
     */
    public int getPosY() {
        return posY;
    }

    /**
     * Retorna a origem do evento.
     * @return O objeto que originou o evento
     */
    public Object getSource() { 
        return source;		
    }

    /**
     * Retorna se a mudança na posição está em efeito 'dragging'.
     * @return Se a posição está mudando.
     */
    public boolean isDragging() {
        return isDragging;
    }
    
    // </editor-fold>
    
    public static enum WindowEvents{
        WINDOW_CLOSED,
        WINDOW_MAXIMIZED,
        WINDOW_MINIMIZED,
        WINDOW_MOVED,
        WINDOW_RESIZED
    }
}
